package main

// 指针
import "fmt"

func main() {
	// 1.&:取内存地址
	n := 18
	p := &n
	fmt.Printf("%T %v\n", p, p) //*int  int类型指针
	// 2.*：根据地址取值
	m := *p
	fmt.Printf("%T %v\n", m, m)

	// 空指针
	var a1 *int //定义了一个int指针类型的a1,此时内有赋值，值是nil
	// *a1 = 100  //*a1 表示对a1取值，由于a1值是空的，所有报错：invalid memory address or nil pointer dereference
	fmt.Println(a1)

	// new函数申请一个内存地址
	var a2 = new(int) // new给基础数据类型申请内存，string，int，返回对应类型的指针
	fmt.Println(a2)   // *a2值是0

	// make 也是申请内存，用于slice,map,chan返回的是对应类型本身
}
